home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Internet Info 1994 March
/
Internet Info CD-ROM (Walnut Creek) (March 1994).iso
/
networking
/
info-service
/
wais
/
ir-book-sources
/
mphf
/
regendrv.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-08
|
3KB
|
107 lines
/******************************* regendrv.c ********************************
Purpose: A program to test regenerating and using a precomputed hashing
function.
Provenance: Written and tested by Q. Chen and E. Fox, April 1991.
Edited and tested by S. Wartik, April 1991.
Notes: The program is used as follows:
regen_driver mphf-file keyword-file
The result is a set of lines, written to stdout, indicating
the bucket of each keyword in the keyword file.
**/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "types.h"
#include "rantab.h"
#include "regenphf.h"
#ifdef __STDC__
extern void retrieveAll ( mphfType *mphf, char *key_file );
extern void exit( int status );
#else
extern void retrieveAll ();
extern void exit();
#endif
/**************************************************************************
main( int, char** )
Return: Nothing.
Purpose: See the header for this file.
**/
main( argc, argv )
int argc;
char *argv[]; /* arg1: mphf file; arg2: key file */
{
mphfType mphf;
if ( argc != 3 ) {
fprintf(stderr, "Usage: %s mphf-file key-file\n", argv[0]);
exit(1);
}
if ( regen_mphf ( &mphf, argv[1] ) == NORM )
retrieveAll ( &mphf, argv[2] );
else {
fprintf(stderr, "Can't regenerate hashing function from \"%s\".\n",
argv[1]);
exit(1);
}
release_mphf ( &mphf );
exit(0);
}
/**************************************************************************
retrieveAll( mphfType*, char* )
Return: void
Purpose: Given a file of keys and a structure describing a
MPHF previously computed for those keys, print
each key's location on the standard output stream.
**/
void retrieveAll( mphf, key_file )
mphfType *mphf; /* in: mphf specification. */
char *key_file; /* in: the key file. */
{
FILE *fp; /* Handle for specification file. */
char string[MAX_KEY_LENG]; /* Key string. */
int hash; /* Computed hash value. */
int max_bucket_length; /* The maximum number of chars */
/* needed to represent a bucket */
/* index as a string. */
if ( (fp = fopen(key_file, "r")) == 0 ) {
fprintf(stderr, "Can't read file \"%s\".\n", key_file);
exit(1);
}
max_bucket_length = (int)log10((double)mphf->no_arcs) + 1;
while ( fgets( string, MAX_KEY_LENG, fp ) != 0 ) {
string[strlen(string)-1] = '\0';
hash = retrieve( mphf, string );
printf("Bucket %*d: %s\n", max_bucket_length, hash, string);
}
fclose(fp);
}